/**
 * 
 */
package pruebas.VerduleriaOl.persistencia.jpa.repositorios;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import pruebas.VerduleriaOl.dominio.entidades.Cliente;
import pruebas.VerduleriaOl.dominio.repositorios.RepoCliente;
import pruebas.VerduleriaOl.excepciones.EstadoInvalido;
import pruebas.VerduleriaOl.persistencia.jpa.entidades.Cliente_Jpa;

import com.intelap.fabricaciones.UnidadTrabajo;

/** @author ggpollit */
public class RepoCliente_Jpa implements RepoCliente {
	@Inject
	private EntityManager em;
	@Inject
	private UnidadTrabajo ut;

	@Override
	public Cliente buscarCliente(String nombre) {
		Query query = em.createQuery("select c from Cliente_Jpa c where c.nombre = :nombre", Cliente_Jpa.class);
		query.setParameter("nombre", nombre);
		List<Cliente> clientes = query.getResultList();
		if (clientes.size() == 1)
			return clientes.get(0);
		else if (clientes.isEmpty())
			return null;
		else {
			throw new EstadoInvalido("Se hallaron dos clientes con el mismo nombre:" + clientes);
		}
	}

	@Override
	public Cliente crearNuevoCliente() {
		Cliente cliente = new Cliente_Jpa();
		ut.registrarNueva(cliente);
		return cliente;
	}

	
//	@Override
//	public Cliente_Jpa getAtada(Cliente desatado) {
//		return em.find(Cliente_Jpa.class, ((Cliente_Jpa) desatado).getId());
//	}
}
